<?php

namespace Illuminate\Contracts\Auth;

/**
 * 身份认证守卫接口定义（有状态）
 */
interface StatefulGuard extends Guard
{
    /**
     * 尝试使用给定凭据对用户进行身份验证
     *
     * @param  array $credentials 凭据
     * @param  bool $remember
     * @return bool
     */
    public function attempt(array $credentials = [], $remember = false);

    /**
     * 在不使用 session 或 cookie 的情况下将用户登录到应用程序（一次性认证）
     *
     * @param  array $credentials
     * @return bool
     */
    public function once(array $credentials = []);

    /**
     * 将用户登录到应用程序
     *
     * @param  \Illuminate\Contracts\Auth\Authenticatable $user
     * @param  bool $remember
     * @return void
     */
    public function login(Authenticatable $user, $remember = false);

    /**
     * 将给定的用户 ID 登录到应用程序中
     *
     * @param  mixed $id
     * @param  bool $remember
     * @return \Illuminate\Contracts\Auth\Authenticatable
     */
    public function loginUsingId($id, $remember = false);

    /**
     * 在不使用 session 或 cookie 的情况下将给定的用户ID记录到应用程序中（一次性认证）
     *
     * @param  mixed $id
     * @return bool
     */
    public function onceUsingId($id);

    /**
     * Determine if the user was authenticated via "remember me" cookie.
     *
     * @return bool
     */
    public function viaRemember();

    /**
     * 将用户退出应用程序
     *
     * @return void
     */
    public function logout();
}
